xcb 获取鼠标指针的坐标
1typedef struct xcb_query_pointer_reply_t {
2 uint8_t response_type;
3 uint8_t same_screen;
4 uint16_t sequence;
5 uint32_t length;
6 xcb_window_t root;
7 xcb_window_t child;
8 int16_t root_x;
9 int16_t root_y;
10 int16_t win_x;
11 int16_t win_y;
12 uint16_t mask;
13 uint8_t pad0[2];
14} xcb_query_pointer_reply_t;
15
16xcb_query_pointer_cookie_t xcb_query_pointer(xcb_connection_t *conn, xcb_window_t window);
17xcb_query_pointer_reply_t *xcb_query_pointer_reply(xcb_connection_t *conn, xcb_query_pointer_cookie_t cookie, xcb_generic_error_t **e);
1#include <stdio.h>
2#include <xcb/xcb.h>
3
4int main()
5{
6 // 连接到X11 Server
7 xcb_connection_t* conn = xcb_connect(NULL, NULL);
8
9 // 获取screen
10 const xcb_setup_t* setup = xcb_get_setup(conn);
11 xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup);
12 xcb_screen_t* screen = iter.data;
13
14 // 获取鼠标指针的坐标
15 xcb_query_pointer_cookie_t cookie = xcb_query_pointer(conn, screen->root);
16 xcb_query_pointer_reply_t* reply = xcb_query_pointer_reply(conn, cookie, NULL);
17 printf("%d %d\n", reply->root_x, reply->root_y);
18 free(reply);
19
20 xcb_disconnect(conn);
21 return 0;
22}